package array;

import java.util.Arrays;

/**
 * @author lj
 * @date 2022/01/12 16:37
 * @email milolj@foxmail.com
 */
public class LeetCode_array8 {
    /**
     给定一个数组 nums，编写一个函数将所有 0 移动到数组的末尾，同时保持非零元素的相对顺序。

     示例:

     输入: [0,1,0,3,12]
     输出: [1,3,12,0,0]
     说明:

     必须在原数组上操作，不能拷贝额外的数组。
     尽量减少操作次数。

     作者：力扣 (LeetCode)
     链接：https://leetcode-cn.com/leetbook/read/top-interview-questions-easy/x2ba4i/
     来源：力扣（LeetCode）
     著作权归作者所有。商业转载请联系作者获得授权，非商业转载请注明出处。
     */

    /**
     * 执行结果：
     * 通过
     * 显示详情
     * 执行用时：
     * 11 ms
     * , 在所有 Java 提交中击败了
     * 11.06%
     * 的用户
     * 内存消耗：
     * 39.8 MB
     * , 在所有 Java 提交中击败了
     * 14.86%
     * 的用户
     * 通过测试用例：
     * 74 / 74
     * @param args
     */

    public static void main(String[] args) {
//        int[] array1 = new int[]{13,19,92};
//        int[] array2 = new int[]{13};
        int[] array1 = new int[]{1,0,0,12};
        LeetCode_array8 leetCode_array1 = new LeetCode_array8();
        long currentTimeMillis1 = System.currentTimeMillis();
        System.out.println("当前时间是：" + currentTimeMillis1);
        leetCode_array1.moveZeroes(array1);
        System.out.println("小号的时间是：" + (System.currentTimeMillis() - currentTimeMillis1));
    }

    public void moveZeroes(int[] nums) {
        int length0; // 不是0的位置
        int current = 0;
        int temp;
        int zero = 0;
        while(current < nums.length) {
            if (nums[current] != 0) {
                length0 = current;
                for (int i = zero; i < nums.length; i++) {
                    if (nums[i] == 0) {
                        if (nums[zero] != nums[i]) {
                            zero = i;
                        }
                        if (length0 > i) {
                            temp = nums[i];
                            nums[i] = nums[length0];
                            nums[length0] = temp;
                            break;
                        }
                    }
                }
            }
            current++;
        }
        System.out.println(Arrays.toString(nums));
    }

/*

    public void moveZeroes(int[] nums) {
        int i = 0;//统计前面0的个数
        for (int j = 0; j < nums.length; j++) {
            if (nums[j] == 0) {//如果当前数字是0就不操作
                i++;
            } else if (i != 0) {
                //否则，把当前数字放到最前面那个0的位置，然后再把
                //当前位置设为0
                nums[j - i] = nums[j];
                nums[j] = 0;
            }
        }
    }
*/

}
